package com.xinsoft.service;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xinsoft.entity.dto.SysMenuDTO;
import com.xinsoft.entity.dto.SysMenuTreeDTO;
import com.xinsoft.entity.po.SysMenu;

import java.util.List;
import java.util.Set;

/**
* @author xuhb
* @description 针对表【sys_menu(目录表)】的数据库操作Service
* @createDate 2023-04-10 11:34:27
*/
public interface SysMenuService extends IService<SysMenu> {

    /**
     * 方法描述: [获取菜单树]
     * 初始作者: hsm
     * param [sysMenuDTO]  查询参数
     * return              菜单树
     */
    SysMenuTreeDTO<SysMenuDTO> getSysTreeDTO(SysMenuDTO sysMenuDTO);

    /**
     * 方法描述: [获取菜单树：用于角色勾选菜单]
     * 初始作者: hsm
     * param roleId  角色id
     * return        菜单树
     */
    JSONArray getMenuTreeByRoleId(Integer roleId);


    List<SysMenu> listByParam(SysMenuDTO sysMenuDTO);

    /**
     * 方法描述: [删除菜单信息]
     * 初始作者: hsm
     * param [ids]
     * return void
     */
    void del(List<Integer> ids);

    /**
     * 方法描述: [保存菜单信息]
     * 初始作者: hsm
     * param menu
     * return 保存菜单信息
     */
    SysMenu addMenu(SysMenuDTO menu);

    /**
     * 方法描述: [编辑菜单信息]
     * 初始作者: hsm
     * param menu
     * return 编辑后菜单信息
     */
    SysMenu editSysMenu(SysMenuDTO menu);

    /**
     * 方法描述: [获取菜单信息]
     * 初始作者: hsm
     * param id 菜单id
     * return 获取菜单信息
     */
    SysMenu getMenuById(Integer id);

    /**
     * 方法描述: [根据用户id获取授权菜单]
     * 初始作者: hsm
     * param userId 用户id
     * return 获取授权菜单
     */
    Set<String> listByUserId(Integer userId) ;


    /**
     * 方法描述: [根据用户id获取授权菜单树]
     * 初始作者: hsm
     * param userId 用户id
     * return 获取授权菜单
     */
    SysMenuTreeDTO<SysMenuDTO> getMenuTreeByUserId(Integer userId,Integer terminal);

    /**
     * 方法描述: [根据用户id获取按钮权限]
     * 初始作者: hsm
     * param userId 用户id
     * return 获取按钮权限
     */
    List<String> getPermsByUserId(Integer userId);
}
